//******************************************************//
//														//
//					Cliente.java						//
//														//
//******************************************************//


package Actores;

import java.util.ArrayList;

import Misc.Linea;

public abstract class Cliente {
    private Integer idCliente;
    private ArrayList<Linea> listaLineas;

    // Constructor ====================================
    
    public Cliente(Integer id) {
        idCliente = id;
        listaLineas = new ArrayList<Linea>();
    }
    
    // Setters ========================================

    public void setID(Integer nro) {
        idCliente = nro;
    }
    

    // Getters ========================================
    
    public Integer getID() {
        return idCliente;
    }
    
    public Integer getCantLineas() {
        return listaLineas.size();
    }
    
    protected ArrayList<Linea> getListaLineas() {
        return listaLineas;
    }
    
    public ArrayList <Linea> getListaLineasAbono() {
    	ArrayList <Linea> listaLineasAbono = new ArrayList <Linea> ();
    	
    	for (Linea l : listaLineas) {
    		if (l.sosAbono())
    			listaLineasAbono.add(l);
    	}
    	
    	return listaLineasAbono;    	
    }
    
    // Otras funciones ================================    

    public boolean agregarLinea(Linea l) {
        return listaLineas.add(l);
    }

    public boolean borrarLinea(Linea l) {
        return listaLineas.remove(l);
    }

    public boolean sos (Integer nro) {
        return nro == idCliente;
    }

    public void mostrarServiciosContratados() {
        for (Linea l : listaLineas) {
            l.mostrarServicios();
        }
    }
    
    abstract public String toString();

    public void informarTotalAbono() {
        Float tot = 0.0f;

        ArrayList <Linea> lineasAbono = new ArrayList <Linea> ();
        
        lineasAbono = this.getListaLineasAbono();
        
        if (lineasAbono != null) {
        	System.out.print( "ID cliente: " + idCliente);   
        	
        	for (Linea l : lineasAbono) {                  
        		System.out.print(
                		"ID Linea: " + l.getID()+
                        "Precio mensual: " + l.getPrecio()
                        + "\nMinutos consumidos: " + l.getMinutosConsumidos()
                        + "\nMensaje consumidos: " + l.getMensajesConsumidos()
                        + "\nMinutos incluidos en el abono: " + l.getMinutos()
                        + "\nMensajes incluidos en el abono: " + l.getMensajes()
                        + "\nValor del minuto excedente: " + l.getValorMinExc()
                        + "\nValor del mensaje excedente: " + l.getValorMenExc()
                        + "\nPrecio total de minutos excedentes: " + l.getCostoMinExc()
                        + "\nPrecio total de mensajes excedentes: " + l.getCostoMenExc());
        	
                tot = (tot + l.getPrecio() + l.getCostoMinExc() + l.getCostoMenExc());
            }
            System.out.print("Costo total a pagar del cliente: $" + tot);
        }
    }    
    
    public abstract void modificarCliente();
    
    public void listarLineas() {    	
    
    	if (listaLineas.isEmpty())
    	System.out.println("\nNo existen lineas asociadas al cliente.");
    	else {
    		System.out.println("Listado de lineas del cliente:\n");        
    		for (Linea l : listaLineas) {    			
                    System.out.println(l.toString() + "\n");                
    		}
    		}    	
    }
    
}